// cart.js
// 导入请求工具
const { get, post, put, del } = require('../../utils/request');
const app = getApp();

Page({
  data: {
    cartItems: [], // 购物车商品列表
    isAllSelected: false, // 是否全选
    selectedCount: 0, // 已选商品数量
    totalPrice: 0, // 合计金额
    canCheckout: false, // 是否可以结算（满29元）
    minCheckoutAmount: 29, // 最低起送金额
    slidingItemId: null, // 当前正在滑动的商品ID
    startX: 0, // 触摸起始X坐标
    currentX: 0 // 当前触摸X坐标
  },

  onShow: function() {
    // 页面显示时，加载购物车数据
    this.loadCartData();
  },

  /**
   * 触摸开始事件
   */
  touchStart: function(e) {
    const touch = e.touches[0];
    this.setData({
      startX: touch.clientX,
      currentX: touch.clientX
    });
  },

  /**
   * 触摸移动事件
   */
  touchMove: function(e) {
    const touch = e.touches[0];
    const cartItemId = e.currentTarget.dataset.id;
    const moveX = touch.clientX;
    const diffX = moveX - this.data.startX;
    
    // 只有向左滑动且当前没有其他商品处于滑动状态时才处理
    if (diffX < 0 && !this.data.slidingItemId) {
      this.setData({
        currentX: moveX,
        slidingItemId: cartItemId
      });
      
      // 更新商品项的滑动状态
      const cartItems = this.data.cartItems.map(item => {
        if (item.id === cartItemId) {
          return { ...item, sliding: true };
        }
        return item;
      });
      
      this.setData({
        cartItems: cartItems
      });
    }
  },

  /**
   * 触摸结束事件
   */
  touchEnd: function(e) {
    const cartItemId = e.currentTarget.dataset.id;
    const diffX = this.data.currentX - this.data.startX;
    
    // 如果向左滑动超过50rpx，则显示删除按钮
    if (diffX < -50) {
      // 更新商品项的滑动状态为完全打开
      const cartItems = this.data.cartItems.map(item => {
        if (item.id === cartItemId) {
          return { ...item, slideOpen: true };
        }
        return item;
      });
      
      this.setData({
        cartItems: cartItems,
        slidingItemId: cartItemId
      });
    } else {
      // 关闭滑动
      this.closeSlide(cartItemId);
    }
  },

  /**
   * 关闭滑动状态
   */
  closeSlide: function(itemId) {
    // 无论是否传入itemId，都关闭所有商品的滑动状态
    const cartItems = this.data.cartItems.map(item => ({
      ...item,
      sliding: false,
      slideOpen: false
    }));
    
    this.setData({
      cartItems: cartItems,
      slidingItemId: null
    });
  },

  /**
   * 点击商品项关闭滑动
   */
  onItemClick: function(e) {
    const cartItemId = e.currentTarget.dataset.id;
    this.closeSlide(cartItemId);
  },

  /**
   * 加载购物车数据
   */
  loadCartData: function() {
    wx.showLoading({
      title: '加载中',
    });

    get('/api/cart/')
      .then(res => {
        wx.hideLoading();
        
        const cartItems = res || [];
        this.setData({
          cartItems: cartItems
        });
        
        // 计算全选状态、已选数量和合计金额
        this.calculateCartStats();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('请求购物车数据失败', err);
        wx.showToast({
          title: '加载购物车失败',
          icon: 'none'
        });
      });
  },

  /**
   * 计算购物车统计信息
   */
  calculateCartStats: function() {
    const { cartItems, minCheckoutAmount } = this.data;
    
    if (cartItems.length === 0) {
      this.setData({
        isAllSelected: false,
        selectedCount: 0,
        totalPrice: 0,
        canCheckout: false
      });
      return;
    }

    // 计算全选状态
    const isAllSelected = cartItems.every(item => item.selected);
    
    // 计算已选商品数量和合计金额
    let selectedCount = 0;
    let totalPrice = 0;
    
    cartItems.forEach(item => {
      if (item.selected) {
        selectedCount += item.num;
        totalPrice += item.goods.current_price * item.num;
      }
    });
    
    // 判断是否可以结算
    const canCheckout = totalPrice >= minCheckoutAmount && selectedCount > 0;
    
    this.setData({
      isAllSelected: isAllSelected,
      selectedCount: selectedCount,
      totalPrice: totalPrice.toFixed(2),
      canCheckout: canCheckout
    });
  },

  /**
   * 切换商品选中状态
   */
  toggleSelect: function(e) {
    const id = e.currentTarget.dataset.id;
    
    // 查找当前商品
    const cartItem = this.data.cartItems.find(item => item.id === id);
    if (!cartItem) return;
    
    const selected = !cartItem.selected;
    
    // 显示加载中
    wx.showLoading({
      title: selected ? '选中中' : '取消选中',
    });
    
    // 调用API更新选中状态
    post('/api/cart/select/', {
      goods_id: cartItem.goods.id,
      selected: selected
    })
      .then(res => {
        wx.hideLoading();
        
        // 更新本地数据
        const cartItems = this.data.cartItems.map(item => {
          if (item.id === id) {
            return { ...item, selected: selected };
          }
          return item;
        });
        
        this.setData({
          cartItems: cartItems
        });
        
        // 重新计算统计信息
        this.calculateCartStats();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('更新选中状态失败', err);
        wx.showToast({
          title: '操作失败',
          icon: 'none'
        });
      });
  },

  /**
   * 全选/取消全选
   */
  toggleSelectAll: function() {
    const isAllSelected = this.data.isAllSelected;
    const newSelected = !isAllSelected;
    
    // 显示加载中
    wx.showLoading({
      title: newSelected ? '全选' : '取消全选',
    });
    
    // 批量更新选中状态
    const promises = this.data.cartItems.map(item => {
      if (item.selected !== newSelected) {
        return post('/api/cart/select/', {
          goods_id: item.goods.id,
          selected: newSelected
        });
      }
      return Promise.resolve();
    });
    
    Promise.all(promises)
      .then(() => {
        wx.hideLoading();
        
        // 更新本地数据
        const cartItems = this.data.cartItems.map(item => ({
          ...item,
          selected: newSelected
        }));
        
        this.setData({
          cartItems: cartItems,
          isAllSelected: newSelected
        });
        
        // 重新计算统计信息
        this.calculateCartStats();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('更新全选状态失败', err);
        wx.showToast({
          title: '操作失败',
          icon: 'none'
        });
      });
  },

  /**
   * 减少商品数量
   */
  decreaseNum: function(e) {
    const id = e.currentTarget.dataset.id;
    const num = e.currentTarget.dataset.num;
    
    this.updateCartItemNum(id, num);
  },

  /**
   * 增加商品数量
   */
  increaseNum: function(e) {
    const id = e.currentTarget.dataset.id;
    const num = e.currentTarget.dataset.num;
    
    this.updateCartItemNum(id, num);
  },

  /**
   * 更新购物车商品数量
   */
  updateCartItemNum: function(id, num) {
    // 显示加载中
    wx.showLoading({
      title: '更新数量',
    });
    
    // 查找当前商品
    const cartItem = this.data.cartItems.find(item => item.id === id);
    if (!cartItem) {
      wx.hideLoading();
      return;
    }
    
    // 调用API更新数量
    post('/api/cart/update_num/', {
      goods_id: cartItem.goods.id,
      num: num
    })
      .then(res => {
        wx.hideLoading();
        
        // 更新本地数据
        const cartItems = this.data.cartItems.map(item => {
          if (item.id === id) {
            return { ...item, num: num };
          }
          return item;
        });
        
        this.setData({
          cartItems: cartItems
        });
        
        // 重新计算统计信息
        this.calculateCartStats();
      })
      .catch(err => {
        wx.hideLoading();
        console.error('更新商品数量失败', err);
        wx.showToast({
          title: '操作失败',
          icon: 'none'
        });
      });
  },

  /**
   * 删除购物车商品
   */
  deleteItem: function(e) {
    const id = e.currentTarget.dataset.id;
    
    // 关闭滑动状态
    this.closeSlide();
    
    // 确认删除
    wx.showModal({
      title: '确认删除',
      content: '确定要从购物车中删除该商品吗？',
      success: (res) => {
        if (res.confirm) {
          // 显示加载中
          wx.showLoading({
            title: '删除中',
          });
          
          // 调用API删除商品
          del('/api/cart/', { id: id })
            .then(() => {
              wx.hideLoading();
              
              // 更新本地数据
              const cartItems = this.data.cartItems.filter(item => item.id !== id);
              
              this.setData({
                cartItems: cartItems
              });
              
              // 重新计算统计信息
              this.calculateCartStats();
              
              wx.showToast({
                title: '删除成功',
                icon: 'success'
              });
            })
            .catch(err => {
              wx.hideLoading();
              console.error('删除商品失败', err);
              wx.showToast({
                title: '删除失败',
                icon: 'none'
              });
            });
        }
      }
    });
  },

  /**
   * 去购物
   */
  goShopping: function() {
    wx.switchTab({
      url: '/pages/index/index'
    });
  },

  /**
   * 去结算
   */
  goCheckout: function() {
    if (!this.data.canCheckout) {
      wx.showToast({
        title: '满29元起送',
        icon: 'none'
      });
      return;
    }
    
    // 跳转到结算页面
    wx.navigateTo({
      url: '/pages/order/checkout'
    });
  }
});